// 引入EventEmitter和util模块（util用于原型继承）
const EventEmitter = require('events');
const util = require('util');

/**
 * Radio构造函数（实现电台开关功能，基于事件触发）
 * @param {string} name - 电台名称（如"music radio"）
 * @param {string} frequency - 电台频率（如"FM 106.7"）
 */
function Radio(name, frequency) {
  // 调用EventEmitter的构造函数（确保事件能力生效）
  EventEmitter.call(this);

  // 初始化电台属性
  this.name = name;
  this.frequency = frequency;
  this.isPlaying = false; // 标记电台是否正在播放
  this.playTimer = null;  // 存储播放延时的定时器ID
}

// 使用util.inherits实现Radio对EventEmitter的继承（Node.js传统继承方式）
util.inherits(Radio, EventEmitter);

/**
 * 打开电台（触发open事件，延时2秒播放音乐）
 */
Radio.prototype.play = function() {
  if (this.isPlaying) {
    console.log(`${this.name} ${this.frequency} is already playing!`);
    return;
  }

  this.isPlaying = true;
  // 触发"open"事件（携带电台信息）
  this.emit('open', { name: this.name, frequency: this.frequency });

  // 延时2秒触发播放音乐（模拟电台开播后播放内容）
  const self = this;
  this.playTimer = setTimeout(() => {
    self.emit('playMusic'); // 触发播放音乐事件
  }, 2000);
};

/**
 * 关闭电台（触发close事件，清除定时器）
 */
Radio.prototype.stop = function() {
  if (!this.isPlaying) {
    console.log(`${this.name} ${this.frequency} is already closed!`);
    return;
  }

  this.isPlaying = false;
  // 清除播放延时定时器（避免关闭后仍播放音乐）
  if (this.playTimer) {
    clearTimeout(this.playTimer);
    this.playTimer = null;
  }
  // 触发"close"事件
  this.emit('close', { name: this.name, frequency: this.frequency });
};

// 暴露Radio构造函数
module.exports = Radio;